#include <sw/redis++/redis.h>
#include <iostream>
#include <gflags/gflags.h>
#include<thread>
DEFINE_string(ip, "127.0.0.1", "这个是服务器的监听ip地址");
DEFINE_int32(port, 6379, "这个是服务器的监听ip端口,格式:8080");
DEFINE_int32(db, 0, "库的编号");
DEFINE_bool(keep_alive, true, "是否保持长连接");
void add_string( sw::redis::Redis& client){
    client.set("会话id","用户id");//无则增加 有则修改
    client.set("会话id2","用户id2");
    client.set("会话id3","用户id3");
    client.set("会话id4","用户id4");

    client.del("会话id3");

    auto user=client.get("会话id");
    if(user)std::cout<<*user<<std::endl;

    auto user2=client.get("会话id2");
    if(user2)std::cout<<*user2<<std::endl;
     auto user3=client.get("会话id3");
    if(user3)std::cout<<*user3<<std::endl;

    auto user4=client.get("会话id4");
    if(user4)std::cout<<*user4<<std::endl;


}
void expired_test(sw::redis::Redis &client) {
    //这次的新增，数据其实已经有了，因此本次是修改
    //不仅仅修改了val，而且还给键值对新增了过期时间
    client.set("会话ID1", "用户ID1111", std::chrono::milliseconds(1000));

   // print(client);
    std::cout << "------------休眠2s-----------\n";
    std::this_thread::sleep_for(std::chrono::seconds(2));
    //print(client);
}

void list_test(sw::redis::Redis &client) {
    client.rpush("群聊1", "成员1");
    client.rpush("群聊1", "成员2");
    client.rpush("群聊1", "成员3");
    client.rpush("群聊1", "成员4");
    client.rpush("群聊1", "成员5");

    std::vector<std::string> users;
    client.lrange("群聊1", 0, -1, std::back_inserter(users));//最后一个参数是把这个数据插入到users里面

    for (auto user : users) {
        std::cout << user << std::endl;
    }
}

int main(int argc,char* argv[])
{
    // 1 实例化redis,链接服务器
    google::ParseCommandLineFlags(&argc, &argv, true);
    sw::redis::ConnectionOptions opts;
    opts.host = FLAGS_ip;
    opts.port = FLAGS_port;
    opts.db = FLAGS_db;
    opts.keep_alive = FLAGS_keep_alive;
    sw::redis::Redis client(opts);//实例化

    // 2添加字符串键值对,删除
    
    add_string(client);
    // 3 数据有效啥时间
    expired_test(client);
    // 4 列表,实现右插入,左获取
    list_test(client);
    return 0;
}